package com.company.common.server.config.cloud;

import cn.hutool.core.util.StrUtil;
import com.company.cloud.common.constant.BaseConstant;
import com.company.common.server.constant.ApplicationPattern;
import com.company.common.server.constant.PayPattern;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

@RefreshScope
@Component
@Getter
@Setter
public class ProjectConfig {

	//基础配置
	/**项目名称*/
	@Value("${project.config.appName:SAAS_APP}")
	private String appName;

	/**项目模式*/
	@Value("${project.config.appPattern:platform}")
	private String appPattern= ApplicationPattern.Platform_Pattern.getCode();
	
	/**国家编号*/
	@Value("${project.config.nationNo:86}")
	private String nationNo="86";

	/**是否单点登录*/
	@Value("${project.config.isSSO:false}")
	private boolean isSSO=false;

	//MQ
	/**是否开启Redis-MQ*/
	@Value("${saas.mq.redis.enabled:false}")
	private boolean redisMqEnabled;

	/**是否开启Active-MQ*/
	@Value("${saas.mq.active.enabled:false}")
	private boolean activeMqEnabled;

	//JOB
	/**是否开启XXL-JOB*/
	@Value("${saas.job.xxl.enabled:false}")
	private boolean xxlJobEnabled;

	//支付配置
	/**支付服务号*/
	@Value("${project.config.payServiceCode:#{null}}")
	private String payServiceCode;
	/**支付配置模式*/
	@Value("${project.config.payPattern:company2platform}")
	private String payPattern= PayPattern.Company_Platform_Pay.getCode();

	//消息配置
	/**消息服务号*/
	@Value("${project.config.msgServiceCode:#{null}}")
	private String msgServiceCode;

	/**是否短信真实发送*/
	@Value("${project.config.isSMSSend:true}")
	private boolean isSMSSend=true;
	
	/**是否生成验证码*/
	@Value("${project.config.isGenerateVCode:true}")
	private boolean isGenerateVCode=true;

	/**默认值验证码*/
	@Value("${project.config.vCodeDef:1111}")
	private String vCodeDef="1111";

	/**发送默认值验证码的手机号列表*/
	@Value("${project.config.vCodeMobile:#{null}}")
	private String vCodeMobile="";
	


	//todo:移除
	/**微信小程序AppID*/
	@Deprecated
	@Value("${project.config.wxAppID:#{null}}")
	private String wxAppID;
	/**微信小程序证书*/
	@Value("${project.config.wxAppSecret:#{null}}")
	private String wxAppSecret;


	public boolean isPlatformPattern(){
		if(StringUtils.isEmpty(this.appPattern)){
			return true;
		}
		if(ApplicationPattern.Platform_Pattern.getCode().equals(this.appPattern)){
			return true;
		}else{
			return false;
		}
	}

	public boolean isCompanyPattern(){
		if(StringUtils.isEmpty(this.appPattern)){
			return false;
		}
		if(ApplicationPattern.Company_Pattern.getCode().equals(this.appPattern)){
			return true;
		}else{
			return false;
		}
	}

	/**是否使用公司配置支付*/
	public boolean isCompanyPay(){
		if(StringUtils.isEmpty(this.appPattern)){
			return false;
		}
		if(PayPattern.Company_Pay.getCode().equals(this.payPattern)){
			return true;
		}else{
			return false;
		}
	}

	/**是否使用平台配置支付*/
	public boolean isPlatformPay(){
		if(StringUtils.isEmpty(this.appPattern)){
			return false;
		}
		if(PayPattern.Platform_Pay.getCode().equals(this.payPattern)){
			return true;
		}else{
			return false;
		}
	}


	/**是否先使用公司配置后使用平台配置支付*/
	public boolean isCompany2PlatformPay(){
		if(StringUtils.isEmpty(this.appPattern)){
			return false;
		}
		if(PayPattern.Company_Platform_Pay.getCode().equals(this.payPattern)){
			return true;
		}else{
			return false;
		}
	}


	/**平台模式：返回默认平台公司，公司模式：返回公司编号*/
	public String getCompanyNo(String companyNo){
		if(this.isPlatformPattern()){
			return BaseConstant.Platform_Company;
		}else{
			return companyNo;
		}
	}

	/**公司编号不为空时，返回。否则判断是否平台模式返回默认平台公司*/
	public String getCompanyNo2Def(String companyNo){
		if(StrUtil.isNotEmpty(companyNo)){
			return companyNo;
		}
		if(this.isPlatformPattern()){
			return BaseConstant.Platform_Company;
		}else{
			return null;
		}
	}

	/**获取默认平台公司编号*/
	public String getPlatformCompanyNo(){
		if(this.isPlatformPattern()){
			return BaseConstant.Platform_Company;
		}else{
			return null;
		}
	}


//	//todo:
//	/**0-31*/
//	private long workerId;
//	/**0-31*/
//	private long datacenterId;

}
